(Si besoin, il existe page complémentaire wake-on-lan)
Le Wake-on-LAN ou mise en marche du PC depuis le réseau est une technologie développée par AMD et IBM, permettant à un ordinateur mis en veille d'être démarré à distance par l'envoi d'un "magic-packet" sur la carte réseau supportant le Wake-on-LAN.
Plus techniquement, le réveil est déclenché quand la carte ethernet de l'ordinateur reçoit un "magic packet" qui est une trame de données ethernet contenant les octets FF FF FF FF FF FF suivis de seize répétitions de l'adresse MAC de la cible, puis d'un mot de passe (si nécessaire) de quatre ou six octets
Cet article vous explique comment installer l'application wakeonlan pour démarrer un ordinateur distant (toutes plate-formes) depuis votre distribution Ubuntu, et vous permet de trouver les informations sur l'ordinateur que vous voulez démarrer. Pour démarrer votre ordinateur avec Ubuntu depuis un autre poste, c'est sur l'autre poste qu'il faut installer le programme.
Pour la suite des opérations, des pré-requis sont nécessaires :
Le WOL doit être activé pour la carte réseau. Ce n'est pas toujours le cas pour des raisons évidentes de sécurité puisque n'importe qui pourrait démarrer un ordinateur en connaissant uniquement l'adresse mac. Cela s'effectue dans le BIOS de l'ordinateur à démarrer tout simplement.
Sous ubuntu, pour voir si votre carte réseau supporte le WOL, exécuter la commande :
sudo ethtool eth0
Vous devez obtenir la ligne suivante :
Supports Wake-on: g
sudo: ethtool: command not found
c'est que le paquet ethtool n'est pas encore installé :
sudo apt-get install ethtool
Si vous obtenez la ligne suivante (en fin du résultat) :
Wake-on: d
c'est que votre carte réseau n'est pas activée pour le WOL. Pour l'activer taper la commande :
sudo ethtool -s eth0 wol g
Cependant, sous GNU/linux lors de l'extinction, le système désactive les interfaces réseaux. Pour supprimer cette sécurité (et c'en est une car elle évite que la machine puisse être réveillée par le réseau sans une intervention volontaire), un des moyens est d'écrire la ligne de commande suivante dans le fichier /etc/rc.local:
ethtool -s eth0 wol g
A mettre avant la ligne :
exit 0
Ainsi à chaque démarrage, la ligne de commande est exécutée, activant la carte réseau pour le prochain démarrage.
ifconfig
Vous obtenez :
eth0 Lien encap:Ethernet HWaddr 00:15:60:B1:xx:xx
inet adr:192.168.1.xx Bcast:192.168.1.255 Masque:255.255.255.0
adr inet6: fe80::215:60ff:feb1:2316/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Packets reçus:4722 erreurs:0 :0 overruns:0 frame:0
TX packets:2971 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:918022 (896.5 KiB) Octets transmis:329459 (321.7 KiB)
Interruption:169
Notez bien cette adresse MAC, c'est à elle que nous enverrons le paquet magique. Elle se trouve après le champs HWaddr.
arp -a
Pour cela, il nous faut installer un logiciel capable de construire la trame qui va bien. Les dépôts Ubuntu contiennent 2 logiciels : etherwake et wakeonlan. Le premier est écrit en langage C, le second en Perl. Attention : etherwake ne permet pas de démarrer un pc en passant par internet, contrairement à wakeonlan. Nous installerons donc wakeonlan, disponible dans le dépôt universe :
- installez le paquet gwakeonlan
sudo apt-get install wakeonlan
wakeonlan 00:0D:9D:9B:BA:xx
Si cela ne fonctionne pas (alors que cela fonctionne avec etherwake), essayez de renseigner l'adresse de Broadcast de votre lan grâce à l'option -i (cf. IP Calculateur d'isiweb.org pour remplacer éventuellement l'adresse 192.168.0.255 donnée ci-dessous).
wakeonlan -i 192.168.0.255 00:0D:9D:9B:BA:xx
wakeonlan -i 78.yyy.xxx.zzz 00:0D:9D:9B:BA:xx
wakeonlan 00:0D:9D:9B:BA:xx 00:0D:9D:9B:yy 00:0D:9D:9B:zz
Si tout s'est bien passé, la machine distante devrait être en train de démarrer.
Pour plus d'information sur la commande wakeonlan :
man wakeonlan
Il peut être intéressant pour tester son installation de se faire envoyer un packet magique depuis internet (notamment si l'ordinateur que l'on souhaite réveiller est derrière un routeur).
Vous pouvez ainsi réveiller votre ordinateur à l'aide de n'importe quel autre ordinateur possédant seulement un navigateur. Ceci peut être pratique quand on n'a pas tous les droits sur un réseau et que l'on souhaite réveiller son ordinateur chez soi pour accéder à ses ressources. Cela évite aussi de se souvenir de ses adresses mac et IP.
<?php
# Wake on LAN - (c) HotKey@spr.at, upgraded by Murzik
# Modified by Allan Barizo http://www.hackernotcracker.com
flush();
function WakeOnLan($addr, $mac,$socket_number) {
$addr_byte = explode(':', $mac);
$hw_addr = '';
for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));
$msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);
for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr;
// send it to the broadcast address using UDP
// SQL_BROADCAST option isn't help!!
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($s == false) {
echo "Error creating socket!\n";
echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s));
return FALSE;
}
else {
// setting a broadcast option to socket:
$opt_ret = socket_set_option($s, 1, 6, TRUE);
if($opt_ret <0) {
echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n";
return FALSE;
}
if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)) {
echo "Magic Packet sent successfully!";
socket_close($s);
return TRUE;
}
else {
echo "Magic packet failed!";
return FALSE;
}
}
}
// Port number where the computer is listening. Usually, any number between 1-50000 will do. Normally people choose 7 or 9.
$socket_number = "9";
// MAC Address of the listening computer's network device
$mac_addy = "XX:XX:XX:XX:XX:XX";
// IP address of the listening computer. Input the domain name if you are using a hostname (like when under Dynamic DNS/IP)
$ip_addy = gethostbyname("my.dns.domain.com");
WakeOnLan($ip_addy, $mac_addy,$socket_number);
?>
Pour utiliser le service de http://wakeonwan.webou.net (lien suspendu) avec une IP dynamique et a peu près sur le même modèle que précédemment depuis internet vous pouvez utiliser le code php suivant :
<?php
$mac_addr = "XX:XX:XX:XX:XX:XX";
// IP address of the listening computer. Input the domain name if you are using a hostname (like when under Dynamic DNS/IP)
$ip_addr = gethostbyname("my.dns.domain.com");
$URL_Wake="http://wakeonwan.webou.net/wakeup.php?ip=".$ip_addr."&mac=".$mac_addr;
echo "<meta http-equiv=\"refresh\" content=\"0;url=".$URL_Wake."\" />" ;
?>
tcpdump -i eth0 port 9
eth0 étant le nom de votre interface réseau …
Bien sur il faut que tcpdump soit installé, si nécessaire effectuez au préalable :
sudo apt-get install tcpdump
Selon votre besoin parfois il est utile d'utiliser la fonctionnalité du WOL sans le paquet magique. pour cela il y a différentes variables.
ethtool -s eth0 wol V
avec V:
p Réveil dès moindre activité physique
u Réveil dès réception d'un message unicast
m Réveil dès réception d'un message multicast
b Réveil dès réception d'un message broadcast
a Réveil dès réception d'un ARP
g Réveil dès réception d'un MagicPacket(tm)
s Réveil dès réception d'un message SecureOn(tm) (mot de passe) pour MagicPacket(tm)
d Désactiver